// 科目编码和科目文本之间的分隔符 
var subline = '　';


//检查float 型数据的长度，其中maxLength定义的是整数部分的数据
function validateInteLength(value){        
        if(value.length < 1 || value === this.emptyText){ // if it's blank
             if(this.allowBlank){
                 this.clearInvalid();
                 return true;
             }else{
                 this.markInvalid(this.blankText);
                 return false;
             }
        }
        var index = value.indexOf(".");
        var l ;
        if(index==-1){
        	l = value.length
        }
        else
          l=index;
        if(l < this.minLength){
            this.markInvalid(String.format(this.minLengthText, this.minLength));
            return false;
        }
        
        if(l > this.maxLength){
            this.markInvalid(String.format(this.maxLengthText, this.maxLength));
            return false;
        }
        if(this.vtype){
            var vt = Ext.form.VTypes;
            if(!vt[this.vtype](value, this)){
                this.markInvalid(this.vtypeText || vt[this.vtype +'Text']);
                return false;
            }
        }
        if(typeof this.validator == "function"){
            var msg = this.validator(value);
            if(msg !== true){
                this.markInvalid(msg);
                return false;
            }
        }
        if(this.regex && !this.regex.test(value)){
            this.markInvalid(this.regexText);
            return false;
        }
        return true;
    
        if(value.length < 1){ // if it's blank and textfield didn't flag it then it's valid
             return true;
        }
       
        value = String(value).replace(this.decimalSeparator, ".");
        if(isNaN(value)){
            this.markInvalid(String.format(this.nanText, value));
            return false;
        }
        var num = this.parseValue(value);
        if(num < this.minValue){
            this.markInvalid(String.format(this.minText, this.minValue));
            return false;
        }
        if(num > this.maxValue){
            this.markInvalid(String.format(this.maxText, this.maxValue));
            return false;
        }
        return true;
    };

//同步请求
function sysRequest(url, params) {
//	return 0;
	var conn = Ext.lib.Ajax.getConnectionObject().conn;
	/**
	 * conn就是XMLHttpRequest对象,XMLHttpRequest.open(method, url, async)
	 * async 参数是 false，请求是同步的，后续对 send() 的调用将阻塞，直到响应完全接收。
	 * 若参数是 true 或省略，请求是异步的 
	 */
	conn.open("post", url, false);//AJAX请求时
	conn.setRequestHeader("content-length", params.length);
	conn.setRequestHeader("content-type", "application/x-www-form-urlencoded");
	conn.setRequestHeader("x-requested-with", "XMLHttpRequest");
	if (typeof(isAir) != 'undefined' && isAir) {
		if (typeof(params) == 'object') {
			params.AIR = 0;
			params = Ext.urlEncode(params);
		} else
			params += "&AIR=0";

	} else {
		if (typeof(params) == 'object')
			params = Ext.urlEncode(params);
	}	
	conn.send(params);
	if(!conn.responseText)
		conn.responseText = "{success:true,message:'',result:[]}"
	var jsonData =  Ext.decode(conn.responseText)
	//对超时或重复登陆的判断
	if(jsonData && jsonData.overtime){
    	 alert(jsonData.message);
    	 if(typeof(RELOGIN_PAGE) == 'undefined')
    	    RELOGIN_PAGE = 'http://uop.wecoo.com/logout.do?method=logout&url=login'
    	
		 window.location.href = RELOGIN_PAGE;
    	 return; 
	}else{
		return jsonData;
	}
}
//验证编码唯一
function validateUnique(url,params,oldNum,newNum,erroMessage){
	if(oldNum == newNum)
		return true;
	if(oldNum != newNum){
		var result = sysRequest(url,params); // 得到请求结果
		if(result && result.result){
			return erroMessage || "编码已存在";
		}else{
			return true;
		}
	}
}
function request(key,allValues) {
	if( !allValues){
		var url = window.document.location.href;
		var pos = url.indexOf("?");
		allValues = url.substr(pos + 1).replace(/#.*$/,"");
	}

	var tmpValues = allValues.split("&");
	for ( var i = 0; i < tmpValues.length; i++) {
		var tmpValue = tmpValues[i].split("=");
		if (tmpValue[0].toUpperCase() == key.toUpperCase())
			return tmpValue[1];
	}
	return "";
}

/**
 * 得到url中的请求参数的值并对值进行uri解码
 * @param {} key
 * @return {String}
 */
function requestDecode(key,allValues) {
	if( !allValues ){
		var url = window.document.location.href;
		var pos = url.indexOf("?");
		allValues = url.substr(pos + 1).replace(/#.*$/,"");
	}
	try{
		allValues = decodeURI( allValues );// URI解码
	}catch(e){
	}

	var tmpValues = allValues.split("&");
	for ( var i = 0; i < tmpValues.length; i++) {
		var tmpValue = tmpValues[i].split("=");
		if (tmpValue[0].toUpperCase() == key.toUpperCase())
			return unescape(tmpValue[1]);	// 解码
	}
	return "";
}

// ========将数字转换成金额格式========
//decimalPrecision控制小数位，默认情况下
//数量 四位 百分比 2位
function money(v, cellmeta, record, rowIndex, columnIndex,
				store,decimalPrecision) {
	if(isNaN(v)|| v==='' || v===undefined)
	{
	   debug(v)				
	     return '';
	}
	var flag = false;
	
	var num = 0;
	if(!decimalPrecision)
	{
		decimalPrecision=4; 
	}
	 
	num = Math.pow(10,decimalPrecision)
	var bit = ".00";
	if (String(v).indexOf("%") != -1) {
		flag=true;
		if (!decimalPrecision) {
			decimalPrecision = 2;
		}
		num = Math.pow(10, decimalPrecision)

		v = parseFloat(v.split("%")[0]);
	}
	 
	v = (Math.round((v - 0) * num)) / num;
	
	v = (v == Math.floor(v)) ? v + bit : ((v * 10 == Math.floor(v * 10)) ? v
			+ "0" : v);
			
	v = String(v);
	var ps = v.split('.');
	var whole = ps[0];
	var sub = ps[1] ? '.' + ps[1] : bit;
	var r = /(\d+)(\d{3})/;
	while (r.test(whole)) {
		whole = whole.replace(r, '$1' + ',' + '$2');
	}
	v = whole + sub;
//	if (v.charAt(0) == '-') {
//		return v.substr(1);
//	}
	if (flag)
		return v + '%';
	else
		return v;
}
function moneyForNegative(v, cellmeta, record, rowIndex, columnIndex,
				store,decimalPrecision) {
	var num = 10000;
	var bit = ".00";
	if (String(v).indexOf("%") != -1) {
		num = 100;
		v = parseFloat(v.split("%")[0]);
	}
	v = (Math.round((v - 0) * num)) / num;
	v = (v == Math.floor(v)) ? v + bit : ((v * 10 == Math.floor(v * 10)) ? v
			+ "0" : v);
	v = String(v);
	var ps = v.split('.');
	var whole = ps[0];
	var sub = ps[1] ? '.' + ps[1] : bit;
	var r = /(\d+)(\d{3})/;
	while (r.test(whole)) {
		whole = whole.replace(r, '$1' + ',' + '$2');
	}
	v = whole + sub;
	if (num == 100)
		return v + '%';
	else
		return v;
}
//计算一个字符串的整数位长度
function getLength(value) {
	var index = value.indexOf(".");
	var l;
	if (index == -1) {
		l = value.length
	} else
		l = index;
	return l;
}
// 链接多个空格
/**
 * @number 制定空格的个数
 */
function copySpaceString(number) {
	var str = '&nbsp;'
	var i = 2
	for (; i < number; i *= 2) {
		str = str + str;
	}
	for ( var j = i / 2; j < number; j += 2) {
		str += '&nbsp;&nbsp';
	}

	return str;
};

/**
 * @param id:被注解的对象的id
 * @param tipTitle
 *            注解标题
 * @parma tipText 注解内容
 * @param tipWidth
 *            注解框的大小，默认200px
 */
function showHelpTip(id, tipTitle, tipText, nodeId, url, tipWidth) {
	// nodeId:帮助页面的节点id
	// url:链接到的页面的路径
	var _nodeId = (nodeId == undefined ? '' : nodeId);
	var _url = (url == undefined ? '' : url);
	var location = "/Help/scmmngHelp.html?nodeId=" + _nodeId + "&url=/Help/"
			+ _url;
	if (id == "1") {
		var tipvgrid = new Ext.Tip( {
			html :isAir?tipText: (tipText+ '<p align=right><a href=' + location
					+ ' target="_blank">更多...</a></p>'),
			closable :true,
			autoHeight :true,
			draggable :true,
			title :tipTitle,
			cls :'tipvgrid',
			width :tipWidth == null ? 200 : tipWidth
		});
		tipvgrid.showAt( [ 0, 120 ]);
		tipvgrid.hide();
	}else{
		new Ext.ToolTip( {
			target :Ext.get(id),
			html :tipText,
			title :tipTitle,
			dismissDelay :0,
			hideDelay :2000,
			closable :true,
			draggable :true,
			autoHeight :true,
			width :tipWidth == null ? 200 : tipWidth
		})
	}
};

/**
 * @param iconId
 *            图片的id
 * @return 返回一个拼写的html
 */
function addHelpIconHtml(iconId) {
//	return '<img id=' + iconId + ' src="/images/pic_01.gif" class="helpTip" style="display:none"/>'
	return '';
};

/**
 * 替换提示图标的显示
 */
function toggleHelpIcon() {
	var arrIcon = Ext.query('.helpTip');
	var i;
	for (i = 0; i < arrIcon.length; i++) {
		var icon = Ext.get(arrIcon[i]);
		// if (icon.isVisible())
		icon.hide();
		// else
		// icon.show();
	}
};
/**
 * 登录成功之后可以 获取session中账套数据,以json格式返回页面
 */
function getAccountBook(path) {
	var accountbook;
	Ext.Ajax.request( {
		url :'/common/commonAction.do?method=getBook',
		method :'post',
		success : function(result, request) {
			var jsonData = Ext.util.JSON.decode(result.responseText);
			if (null == jsonData.result) {
				displayMessageBox('提示信息', "您还没有登录系统,请您先登录")
			} else
				accountbook = jsonData.result;
		},
		failure : function(result, request) {
			var jsonData = Ext.util.JSON.decode(result.responseText);
			displayMessageBox('出错信息', jsonData.message);
		}
	});
	return accountbook;
}

//页面判断是否购买帐务服务1
function haveFinanceService(path,arrCmpIds){
	return 1;
	var _path=(path==null?'':path);
	var flag=(parent.isInitedFinance()&&parent.isExistedUsableAccountService());
	if(arrCmpIds==null) return;
	for(i=0;i<arrCmpIds.length;i++){
		var obj=Ext.getCmp(arrCmpIds[i]); 
		if(obj && obj.container)
		{
		   flag==true?obj.container.up('div.x-form-item').show():obj.container.up('div.x-form-item').hide();
			flag == true ? obj.enable():obj.disable();
		}
	}
}

//页面判断是否购买帐务服务1
function haveFinanceServiceField(path,arrCmpIds){
	return 1;
	var _path=(path==null?'':path);
	var flag=(parent.isInitedFinance()&&parent.isExistedUsableAccountService());
	if(arrCmpIds==null) return;
	for(i=0;i<arrCmpIds.length;i++){
		var obj=arrCmpIds[i]; 
		if(obj && obj.container)
		{   flag==true?obj.container.up('div.x-form-item').show():obj.container.up('div.x-form-item').hide();
		    flag == true ? obj.enable():obj.disable() ;}
	}
}
//页面判断是否购买帐务服务2
function haveFinanceService2(path){
	return 1;
	var flag=(parent.isInitedFinance()&&parent.isExistedUsableAccountService());
	isShownFunc(flag)// 只是一个方法接口,需要调用haveFinanceService方法的页面单独实现isShownFunc方法
}
/**
 * 进入账套时,更新session中账套信息
 */
function gotoAccountbook(_id) {
	Ext.Ajax.request( {
		url :'./common/commonAction.do?method=setBook',
		method :'post',
		params : {
			id :_id
		},
		success : function(result, request) {
		},
		failure : function(result, request) {
			var jsonData = Ext.util.JSON.decode(result.responseText);
			displayMessageBox('出错信息', jsonData.message);
		}
	});
	window.location.href = "default.jsp";
}
/**
 * 获取grid中所有的数据集合,并组装成为 a=1&b=2&c=5&a=1&b=2&c=5&a=1&b=2&c=5格式的串
 */
function getAllDataFromGrid(_grid) {
	var _columns = new Array();
	_grid.getStore().getAt(0).fields.each( function(f) {
		_columns.push(f.name);
	});
	var allDataFromGrid = "";
	for ( var m = 0; m < _grid.getStore().getCount(); m++) {
		for ( var n = 0; n < _columns.length; n++) {
			allDataFromGrid = allDataFromGrid + _columns[n] + "="
					+ _grid.getStore().getAt(m).get(_columns[n]) + "&";
		}
	}
	return allDataFromGrid;

}

// JS日期操作大全
// 今天
function showToDay() {
	var Nowdate = new Date();
	M = Number(Nowdate.getMonth()) + 1
	return Nowdate.getFullYear() + "-" + M + "-" + Nowdate.getDate();
}

// 本周第一天
function showWeekFirstDay() {
	var Nowdate = new Date();
	if (Nowdate.getDay() == 0)
		WeekFirstDay = new Date(Nowdate - (7 - 1) * 86400000);
	else
		WeekFirstDay = new Date(Nowdate - (Nowdate.getDay() - 1) * 86400000);
	return WeekFirstDay;
}
// 本周最后一天
function showWeekLastDay() {
	var WeekFirstDay;
	var Nowdate = new Date();
	if (Nowdate.getDay() == 0)
		WeekFirstDay = new Date(Nowdate - (7 - 1) * 86400000);
	else
		WeekFirstDay = new Date(Nowdate - (Nowdate.getDay() - 1) * 86400000);
	var WeekLastDay = new Date((WeekFirstDay / 1000 + 6 * 86400) * 1000);
	return WeekLastDay;
}

// 本月第一天
function showMonthFirstDay() {
	var Nowdate = new Date();
	var MonthFirstDay = new Date(Nowdate.getFullYear(), Nowdate.getMonth(), 1);
	return MonthFirstDay;
}
// 本月最后一天
function showMonthLastDay() {
	var Nowdate = new Date();
	var MonthNextFirstDay = new Date(Nowdate.getFullYear(), Nowdate.getMonth() + 1,1);
	var MonthLastDay = new Date(MonthNextFirstDay - 86400000);
	return MonthLastDay;
}
// 上月第一天
function showPreviousFirstDay() {
	var MonthFirstDay = showMonthFirstDay()
	return new Date(MonthFirstDay.getFullYear(), MonthFirstDay.getMonth() - 1, 1)
}
// 上月最后一天
function showPreviousLastDay() {
	var MonthFirstDay = showMonthFirstDay();
	return new Date(MonthFirstDay - 86400000);
}
// 上周第一天
function showPreviousFirstWeekDay() {
	var WeekFirstDay = showWeekFirstDay()
	return new Date(WeekFirstDay - 86400000 * 7)
}
// 上周最后一天
function showPreviousLastWeekDay() {
	var WeekFirstDay = showWeekFirstDay()
	return new Date(WeekFirstDay - 86400000)
}
// 上一天
function showPreviousDay() {
	var MonthFirstDay = new Date();
	return new Date(MonthFirstDay - 86400000);
}
// 下一天
function showNextDay() {
	var MonthFirstDay = new Date();
	return new Date((MonthFirstDay / 1000 + 86400) * 1000);
}
// 下周第一天
function showNextFirstWeekDay() {
	var MonthFirstDay = showWeekLastDay()
	return new Date((MonthFirstDay / 1000 + 86400) * 1000)
}
// 下周最后一天
function showNextLastWeekDay() {
	var MonthFirstDay = showWeekLastDay()
	return new Date((MonthFirstDay / 1000 + 7 * 86400) * 1000)
}
// 下月第一天
function showNextFirstDay() {
	var MonthFirstDay = showMonthFirstDay()
	return new Date(MonthFirstDay.getFullYear(), MonthFirstDay.getMonth() + 1, 1)
}
// 下月最后一天
function showNextLastDay() {
	var MonthFirstDay = showMonthFirstDay()
	return new Date(new Date(MonthFirstDay.getFullYear(),
			MonthFirstDay.getMonth() + 2, 1) - 86400000)
}
// 本季度第一天
function showFirstQuarterDay() {

	switch (Math.floor(new Date().getMonth() / 3) + 1) {
	case 1:
		return new Date(new Date().getFullYear(), 0, 1);
		break;
	case 2:
		return new Date(new Date().getFullYear(), 3, 1);
		break;
	case 3:
		return new Date(new Date().getFullYear(), 6, 1);
		break;
	case 4:
		return new Date(new Date().getFullYear(), 9, 1);
		break;
	default:
		return new Date(new Date().getFullYear(), 0, 1);
		break;

	}

}
// 本季度最后一天
function showLastQuarterDay() {
	switch (Math.floor(new Date().getMonth() / 3) + 1) {
	case 1:
		return new Date(new Date().getFullYear(), 2, 31);
		break;
	case 2:
		return new Date(new Date().getFullYear(), 5, 30);
		break;
	case 3:
		return new Date(new Date().getFullYear(), 8, 30);
		break;
	case 4:
		return new Date(new Date().getFullYear(), 11, 31);
		break;
	default:
		return new Date(new Date().getFullYear(), 2, 31);
		break;

	}
}
// 四舍五入方法。value是值，bit是小数位数
function round(value,bit) {
	return (value.toFixed(bit));	
}

 
function sumField(dsList, fieldName, txt_field,flag,decimalPrecision) {
	// dsList Store
	// fieldName 列的dataindex
	// txt_field 控件对象
	var i;
	var totalQty = 0;
	if(!decimalPrecision)
	   decimalPrecision=4;
	var num = Math.pow(10,decimalPrecision);
	
	for (i = 0; i < dsList.getCount(); i++) {
		totalQty += parseFloat(dsList.getAt(i).get(fieldName)) * num;
	}
	totalQty = totalQty / num;
	txt_field.setValue(money(totalQty));
}
function validateFloat(value) {
	var patrn = /^([\d]{0,12})([.]{0,1})((\d){0,2})$/;
	if (!patrn.exec(value))
		return false;
	return true
}

// 日期比较大小
function parseDate(d1, d2) {
	return Date.parse(d1.replace(/-/g, "/")) > Date.parse(d2
			.replace(/-/g, "/"));
}

// 期间比较大小
function checkPeriod(d1, d2) {
	var p1 = d1.format('Ym');
	var p2 = d2.format('Ym');
	return parseInt(p1) > parseInt(p2);
}

// 判空，返回零
function trimNull(value) {
	if (value == null || value == '' || value == undefined) {
		return 0;
	}
	return value;
}

// 去左空格;
function ltrim(s) {
	return s.replace(/^\s*/, "");
}
// 去右空格;
function rtrim(s) {
	return s.replace(/\s*$/, "");
}
// 去左右空格;
function trim(s) {
	return rtrim(ltrim(s));
}

// 在输入日期框时校验输入的合法性
function validate_date_keypress(field, e) {
	var str = field.getRawValue();
	var keyCode = event.keyCode;
	// 输入完年后输入月的第一位时保证只能输入0和1
	if (str.length == 4) {
		if (keyCode < 48 || keyCode > 49)// '0'和'1'
			event.returnValue = false;
	} else if (str.length == 5) {
		if (str.substr(4, 1) == 0) // '0'
		{
			if (keyCode < 49)// '00'是无效的月份
				event.returnValue = false;
		} else if (str.substr(4, 1) == 1) {
			if (keyCode < 48 || keyCode > 50)// 除'10' '11' '12' 外是无效的月份
			{
				event.returnValue = false;
			}
		}
	} else if (str.length > 5)
		event.returnValue = false;
}

// 焦点离开时校验日期文本的正确性
function validate_date_blur(field) {
	var input = field.getRawValue();
	var re = /^[0-9]+.?[0-9]*$/; // 判断字符串是否为数字 //判断正整数 /^[1-9]+[0-9]*]*$/
	if (!re.test(input) || input.length != 6 || input.substr(4, 2) < '01'
			|| input.substr(4, 2) > '12')// 不为数字或不是6位或月份不正确
	{
		field.setValue(new Date());
	}
}

// 在输入日期框时校验输入的合法性
function validate_date_keypress_2(field, e) {
	var str = field.getRawValue();
	var keyCode = event.keyCode;
	// 输入完年后输入月的第一位时保证只能输入0和1
	if (str.length == 4) {
		if (keyCode < 48 || keyCode > 49)// '0'和'1'
			event.returnValue = false;
	} else if (str.length == 5) {
		if (str.substr(4, 1) == 0) // '0'
		{
			if (keyCode < 49)// '00'是无效的月份
				event.returnValue = false;
		} else if (str.substr(4, 1) == 1) {
			if (keyCode < 48 || keyCode > 50)// 除'10' '11' '12' 外是无效的月份
			{
				event.returnValue = false;
			}
		}
	} else if (str.length == 6)// 当按下第7个键时
	{
		if (keyCode < 48 || keyCode > 53) // 0,1,2,3
			event.returnValue = false;
	} else if (str.length == 7)// 当按下第8个键时
	{
		if ((str.substr(6, 1) == 3) && keyCode > 49)// 日不能超过31
			event.returnValue = false;
	} else if (str.length > 7)// 超过8个键
		event.returnValue = false;
}
function validate_date_blur_2(field) {
	var input = field.getRawValue();
	var re = /^[0-9]+.?[0-9]*$/; // 判断字符串是否为数字 //判断正整数 /^[1-9]+[0-9]*]*$/
	if (!re.test(input) || input.length != 8)// 不为数字或不是6位或月份不正确
	{
		field.setValue(new Date().format('Ymd'));
	}
}

// Grid指定列求和,高精度计算，需先引入 Decimal.js,放大10000倍
function sum(store, property, start, end) {
	var tot = 0;
	for ( var i = start; i <= end; i++) {
		var value = store.getAt(i).get(property);
		tot = addExt(tot, value);
	}
	return tot;
}

// 欢迎页面导航
var currentClick = '';
function menu_mouseclick(obj) {
	if (obj.id != currentClick) {
		obj.className = "selected";
		document.getElementById(obj.id + "_pic").style.display = "";
		if (currentClick != '') {
			var o = document.getElementById(currentClick);
			o.className = o.className.replace('selected', '');
			document.getElementById(o.id + "_pic").style.display = "none";
		}
		currentClick = obj.id;
	}
}

// ///////////////////月份下拉列表组件 去当前月份及前十个月/////////////////////////
var monthCombo = function(labelName, period) {
	var currMonth = new Date().format('Ym');
	var _lastMon = function(currMonth) {
		if (currMonth.substring(4, 6) == '01') {
			var year = currMonth.substring(0, 4) - 1;
			return year + '12';
		} else
			return currMonth - 1;
	}
	var month_data = new Array();
	for ( var i = 1; i <= 10; i++) {
		month_data.push( [ i, currMonth ]);
		currMonth = _lastMon(currMonth.toString());
	}
	var month_store = new Ext.data.SimpleStore( {
		fields : [ 'id', 'period' ],
		data :month_data
	});
	return new Ext.form.ComboBox( {
		fieldLabel :labelName,
		store :month_store,
		displayField :'period',
		typeAhead :true,
		mode :'local',
		maxLength :6,
		minLength :6,
		maskRe :/\d/,
		triggerAction :'all',
		selectOnFocus :true,
		width :90,
		value :new Date().format('Ym'),
		listeners : {
			'blur' : function(field) {
				_validate_date_blur(field);
			},
			'keypress' : function(field, e) {
				validate_date_keypress(field, e)
			},
			'change' : function() {
				if (period) {
					period.setValue('自定义')
				}
				;
			},
			'specia	lkey' : function(field, e) {
				if (e.ENTER == e.getKey()) {
					search();
				}
			}
		}
	});
}

function _validate_date_blur(field) {
	var input = field.getRawValue();
	var re = /^[0-9]+.?[0-9]*$/; // 判断字符串是否为数字 //判断正整数 /^[1-9]+[0-9]*]*$/
	if (!re.test(input) || input.length != 6 || input.substr(4, 2) < '01'
			|| input.substr(4, 2) > '12')// 不为数字或不是6位或月份不正确
	{
		field.setValue(new Date().format('Ym'));
	}
}
// ///////////////////月份下拉列表组件 去当前月份及前十个月 END////////////////////////

/////////////////////JS精确计算////////////////////////

function addExt(v1,v2){
	var r1,r2,m;
    try{r1=v1.toString().split(".")[1].length}catch(e){r1=0}
    try{r2=v2.toString().split(".")[1].length}catch(e){r2=0}
    m=Math.pow(10,Math.max(r1,r2))
    return (v1*m+v2*m)/m
}

function minusExt(v1,v2){
	var r1,r2,m;
    try{r1=v1.toString().split(".")[1].length}catch(e){r1=0}
    try{r2=v2.toString().split(".")[1].length}catch(e){r2=0}
    m=Math.pow(10,Math.max(r1,r2))
    return (v1*m-v2*m)/m
}

/////////////////////JS精确计算////////////////////////



// 记录互斥时间起点
new Ext.form.Hidden( {
	id :'hid_timeStamp',
	value :''
});
function saveCurTimeStamp(path) {
	Ext.Ajax.request( {
		url :'/common/commonAction.do?method=_getCurTimeStamp',
		method :'post',
		success : function(result, request) {
			var jsonData = Ext.util.JSON.decode(result.responseText);
			Ext.getCmp('hid_timeStamp').setValue(jsonData.result);
		}
	});
}
function getCurTimeStamp() {
	return Ext.getCmp('hid_timeStamp').getValue();
}

function saveCurTime() {
	Ext.Ajax.request( {
		url :'/scmMng/bussinessUtil.do?method=getCurTimeStamp'
	});
}
/////////////////////// getOpacityMask /////////////////////////
/**
 * 取得可设置透明度的mask		add by tongliang 20080830
 * @param {} component		要被mask遮盖的组件	
 * @param {} opacity		mask的不透明度,0到1之间的小数,数值越大mask颜色越深
 * @param {} maskSize       mask的大小
 * @param {}  msg、msgCls
 * @param {} alignToComponent  相对于component对齐
 * @param {} useOwnSize     使用传进来的参数maskSize的大小
 * @return	 mask			Ext.Element类型,调用show()和hide()实现遮盖/清除遮盖
 * 
 */
var getOpacityMask = function(component,opacity,maskSize,msg,msgCls,alignToComponent,useOwnSize){
	if( !component )return ;
	var el = Ext.get(component);
	if( !el && component.el ){
		el = component.el;
	}
	opacity = (typeof opacity == 'number')? opacity : 0.5 ;
    var mask = el.createChild({cls:"ext-el-mask"}, el.dom);
	mask.enableDisplayMode("block");
	
	if(typeof msg == 'string'){
        var _maskMsg = Ext.DomHelper.append(mask, {cls:"ext-el-mask-msg", cn:{tag:'div'}}, true);
        var mm = _maskMsg;
        mm.dom.className = msgCls ? "ext-el-mask-msg " + msgCls : "ext-el-mask-msg";
        mm.dom.firstChild.innerHTML = msg;
        mm.setDisplayed(true);
        mask.msgEl = mm ;
    }else{
		mask.setOpacity( 0 );				// 设置不透明度
//		mask.setOpacity( 0.5 );				// 设置不透明度
    }
    var w=Ext.lib.Dom.getViewWidth(true);
    var h = Ext.lib.Dom.getViewHeight(true);
    if(useOwnSize)
    	w = maskSize?(maskSize[2]?maskSize[2]:Ext.lib.Dom.getViewWidth(true)):Ext.lib.Dom.getViewWidth(true);
    	h = maskSize?(maskSize[3]?maskSize[3]:Ext.lib.Dom.getViewHeight(true)):Ext.lib.Dom.getViewHeight(true) ;
	
	mask.setSize(w,h);	
	if(alignToComponent)
	   mask.alignTo(el,'tl-tl');	
	
	mask.setStyle("z-index","5000");
//	mask.setStyle("background-color","blue");
	mask.hide();
	return mask ;
}

/**
 * 取得组件的滚动条的区域范围
 * @param {} el
 * @return {}
 */
function getBlankBounds( el,cnt ){
	
	var top = el.getTop() - cnt.getTop();
	var left = el.getLeft() - cnt.getLeft() +1 + el.getViewSize().width ;
	var width = el.getWidth() - el.getViewSize().width ;
	var height = el.getHeight() ;
	
	return [left, top , width , height ] ;
}

function getElBounds( el ){
	var box = el.getBox( true, true );
	return [ box.y, box.x, box.width, box.height ];
}

/**
 * 取得中间有矩形空白区域的可设置透明度的mask		add by tongliang 20080916
 * @param {} component		要被mask遮盖的组件	
 * @param {} opacity		mask的不透明度,0到1之间的小数,数值越大mask颜色越深
 * @param {} maskSize		mask区域坐标数组[top,left,width,height]
 * @param {} blank			空白区域坐标数组[left,top,width,height]
 * @return	 mask			调用show()和hide()实现遮盖/清除遮盖
 */
var getOpacityMaskWithBlank = function(component,opacity,maskSize,blank){
	if( !blank ){
		return getOpacityMask(component,opacity,maskSize);
	}
	if( !component || !maskSize || !blank )
		return ;
	var el = Ext.get(component);
	if( !el && component.el ){
		el = component.el;
	}
	opacity = (typeof opacity == 'number')? opacity : 0.5 ;
	var el2 = blank.el;
	var top ,left,width,height ;
	if( el2 ){
		top = el2.getTop();
		left   = el2.getLeft() + el2.getViewSize().width-5;
		width  = el2.getWidth() - el2.getViewSize().width+5;
		height = el2.getHeight();
	}else{
		left   = blank[0];
		top	   = blank[1];
		width  = blank[2];
		height = blank[3];
	}

//	var left = blank[0];
//	var top = blank[1];
//	var width = blank[2];
//	var height = blank[3];
	
	var maskTop  = maskSize[0];
	var maskLeft = maskSize[1];
	var maskWidth = maskSize[2];
	var maskHeight = maskSize[3];
	top=top-el.getTop();
	left=left-el.getLeft();
	function createMask(left,top,width,height,color){
		if( width <= 0 || height <= 0)
		return ;
		var mask = el.createChild({cls:"ext-el-mask"}, el.dom);
		mask.enableDisplayMode("block");
		mask.setLeftTop( left, top );
//		mask.setStyle( "background-color", color);
		mask.setSize( width, height );
		mask.setOpacity( 0 );			// 设置为全透明
//		mask.setOpacity( 0.5 );			// 设置为全透明
		mask.setStyle("z-index","5000");
		mask.hide();
		return mask ;
	}
	
	var mask1 = createMask(maskLeft,maskTop,maskWidth,top,"red");
	var mask2 = createMask(maskLeft,top,left-maskLeft,maskHeight-top+maskTop,"blue");
	var mask3 = createMask(left,top+height,maskWidth-left+maskLeft,maskHeight-top+maskTop-height,"yellow");
	var mask4 = createMask(left+width,top,maskWidth-left+maskLeft-width,height,"green");
	
	var mask = mask1 || mask2 || mask3 || mask4 ;
	return {
		hide : function(){
			if( mask1 )mask1.hide();
			if( mask2 )mask2.hide();
			if( mask3 )mask3.hide();
			if( mask4 )mask4.hide();
		},
		show : function(){
			if( mask1 )mask1.show();
			if( mask2 )mask2.show();
			if( mask3 )mask3.show();
			if( mask4 )mask4.show();
		},
		focus : function(){
			if( mask ){
				mask.focus();
			}
		},
		on	: function(evtName, fn,scope,options){
			if( mask ){
				mask.on(evtName, fn,scope,options);
			}
		},
		un	: function(evtName, fn){
			if( mask ){
				mask.un(evtName, fn);
			}
		}
	} ;
}


/**
 * 获取record指定列的数据集合,并组装成为 a=1&b=2&c=5&a=1&b=2&c=5&a=1&b=2&c=5格式的串
 * @param _columns 	Array ,指定的数据列, _columns为undefined时,组装所有列
 */
//function getDataFromRecord( r, _columns ){
//	if( !_columns ){
//		_columns = new Array();
//		r.fields.each( function(f) {
//			_columns.push(f.name);
//		});
//	}	
//	var data = new Array();
//	for( var i =0 , len = _columns.length; i< len ; i++){
//		var val = r.get(_columns[i]) === undefined ? '' : r.get(_columns[i]);
//		data.push(_columns[i], '=' , val ,'&');
//	}
//	return data.join('');
//}

function getDataFromRecord( r, _columns ){
	if( !_columns ){
		_columns = new Array();
		r.fields.each( function(f) {
			_columns.push(f.name);
		});
	}
	var obj = {} ;
	for( var i =0 , len = _columns.length; i< len ; i++){
		var val = r.get(_columns[i]) === undefined ? '' : r.get(_columns[i]);
		obj[_columns[i]] = val ;
	}
	return Ext.urlEncode(obj)+"&" ;
}


/**
 * 获取store指定列的数据集合,并组装成为 a=1&b=2&c=5&a=1&b=2&c=5&a=1&b=2&c=5格式的串
 * @param _columns 	Array ,指定的数据列, _column为undefined时,组装所有列
 */
function getDataFromStore( store, _columns) {
	if(store.getCount()==0)
	   return '';
	if( !_columns ){
		_columns = new Array();
		store.getAt(0).fields.each( function(f) {
			_columns.push(f.name);
		});
	}	
	var allData = new Array();
	for ( var m = 0 , len = store.getCount(); m < len; m++) {
		allData.push( getDataFromRecord(store.getAt(m),_columns ) );
	}
	return allData.join('');
}

/**
 * 获取record指定列的数据集合,并组装成为 a=1&b=2&c=5&a=1&b=2&c=5&a=1&b=2&c=5格式的串, 并进行编号
 * @param _columns 	Array ,指定的数据列, _column为undefined时,组装所有列
 */
function getEncodeDataFromRecord( r, _columns ){
	if( !_columns ){
		_columns = new Array();
		r.fields.each( function(f) {
			_columns.push(f.name);
		});
	}
	var data = new Array();
	for( var i =0 , len = _columns.length; i< len ; i++){
		var val = r.get(_columns[i]) === undefined ? '' : escape(r.get(_columns[i])) ;// escape编号
		data.push(_columns[i], '=' , val ,'&'); 
	}
	return encodeURI( data.join('') );	// encodeURI编号
//	return ( data.join('') );	// encodeURI编号
}

/**
 * 获取store指定列的数据集合,并组装成为 a=1&b=2&c=5&a=1&b=2&c=5&a=1&b=2&c=5格式的串, 并进行编号
 * @param _columns 	Array ,指定的数据列, _column为undefined时,组装所有列
 */
function getEncodeDataFromStore( store, _columns) {
	if( !_columns ){
		_columns = new Array();
		store.getAt(0).fields.each( function(f) {
			_columns.push(f.name);
		});
	}	
	var allData = new Array();
	for ( var m = 0 , len = store.getCount(); m < len; m++) {
		allData.push( getEncodeDataFromRecord(store.getAt(m),_columns ) );
	}
	return allData.join('');
}
/**
 * 将数组中的'键值对'并组装成为 a=1&b=2&c=5&a=1&b=2&c=5&a=1&b=2&c=5格式的串, 并进行编号
 * @param _array 	'键值对'数组
 */
function getEncodeParams( array ){
	if( !array instanceof Array || array.length%2 != 0){
		return ;
	}
	var length = array.length ;
	var params = new Array();
	var key ,val ; 
	for( var i =0 ;i< length ; i+=2 ){
		key = array[i];
		val = array[i+1] === undefined ? '': escape(array[i+1] );
		params.push( key, '=', val, '&');
	}
	
	return encodeURI( params.join('') );
}
/**
 * 将数组中的'键值对'并组装成为 a=1&b=2&c=5&a=1&b=2&c=5&a=1&b=2&c=5格式的串
 * @param _array 	'键值对'数组
 */
function formatParams( array ){
	if( !array instanceof Array || array.length%2 != 0){
		return ;
	}
	var length = array.length ;
	var params = new Array();
	var key ,val ; 
	for( var i =0 ;i< length ; i+=2 ){
		key = array[i];
		val = array[i+1] === undefined ? '': array[i+1];
		params.push( key, '=', val, '&');
	}
	
	return  params.join('') ;
}

/**
 * 检测是否为中文
 * @params str 	待检测的字符串，不含标点
 */
function isChineseText( str ){
	var re = /^[\u4e00-\u9fa5]+$/;
	return re.test(str) ;
}
//div 的id
//keyword 关键字
var orignal_innerHTML;
function keySearch(id,keyword){
	document.getElementById(id).innerHTML=orignal_innerHTML;
	if(keyword!=''&&keyword!=null){
	var s=document.getElementById(id).innerHTML; 
	var re=new RegExp("("+keyword+")","ig"); 
	s=s.replace(re,"<span class='keyword-search'>$1</span>"); 
	document.getElementById(id).innerHTML = s; 
	}
}

function accountNumValidator(accType,num){
	if( accType == 1 ){ // 银行
		if( /^\d*$/.test(num) == false ){// 输入全部为数字
			return '输入非法,请输入数字';
		}
		if( num.length < 10){
			return '银行账号的最小长度为10位';
		}
		return true;			
	}else{// 现金
		if( /^\d*$/.test(num) == false ){// 输入全部为数字
			return '输入非法,请输入数字';
		}
		return true ;
	}
}

Ext.ns('Ufida');
Ufida.Vtype = {
	tel:/^\d{7,8}$/,//电话
	telStr:'请输入7位或8位数字',
//	telStr:'<p style="white-space:normal;width:130px;">该输入项必须为7位或8位的数字!</p>',
	areaNo:/^\d{3,5}$/,//电话区号
	areaNoStr:'请输入3至5位数字',
	fax:/^\d{3}-\d{8}|\d{4}-\d{7}$/,//传真
	faxStr:'请输入正确的格式:区号-号码',
	post:/^[0-9]\d{5}(?!\d)$/,//邮编
	postStr:'请输入6位数字',
	phone:/^(\d{3}-?\d{8}|\d{4}-?\d{7})|((13[0-9]|15[0-9])\d{8})$/,//手机
	phoneStr:'请输入正确的格式'
}
//进度条
Ufida.Progress = function(){
	var proBar = Ext.MessageBox;
	return {
		hide:function(){
			proBar.hide();
		},
		show:function(msg){
			proBar.wait(msg);
		}
	}
}();


var INCOME_SUB_NO='3131';
var INCOME_ASSIGN_SUBJECT_NO='314115';

Ufida.FuzzyQueryFlag = true ;
Ufida.FuzzyQueryLabel = '<span class="x-search-field-label">查询:</span>'
Ext.onReady(function(){
	setTimeout( function(){
		var searchFieldLabels = Ext.DomQuery.select('.x-search-field-label');
		if( !searchFieldLabels ){
			return ;
		}
		for(var i=0,len=searchFieldLabels.length;i<len;i++){
			var searchFieldLabel = searchFieldLabels[i];
			debug(searchFieldLabel)
			setFuzzyQueryBtnTip(searchFieldLabel);
		};
		
		
	},500);
});

function checkFuzzyQueryBtnTip(searchFieldLabel,grid,btn){
	setTimeout(function(){
		setFuzzyQueryBtnTip(searchFieldLabel,grid,btn)
	},500);
}

function setFuzzyQueryBtnTip(searchFieldLabel,grid,btn){
		if(!searchFieldLabel){
			return;
		}
		searchFieldLabel = Ext.get(searchFieldLabel);
		// 取得'开始查询'按钮
		if( !btn ){
			var td = searchFieldLabel.up('td');
			while( td ){
				td = td.next('td');
				btn = td.down('.x-btn');
				if( btn ){
					break ;
				}
			}
		}
		if( !btn ){
			debug("setFuzzyQueryBtnTip btn is null")
			return ;
		}
		btn = Ext.get(btn.id)
		// 取得grid 
		if( !grid ){
			grid = searchFieldLabel.up('.x-grid-panel',200);
			if( !grid ){
				debug("setFuzzyQueryBtnTip grid is null")
				return ;
			}
			grid = Ext.getCmp(grid.id)
		}
		// 通过grid的store的url判断grid中的基础档案类型
		// 基础档案类型对应的action
		var baseTypes = [	'bankAcc.do',				// 现金银行账户
							'stockInfo.do',				// 货品
							'client.do',				// 客户
							'supplyer.do',				// 供应商 
							'emp.do',					// 员工
							'revenuePaymentReason.do',	// 收支原因
							'srMsg.do',					// 出入库类别 
							'storeroom.do',				// 出入库类别 
							'measurement.do'			// 计量方案
						];
		// 各档案模糊查询的字段
		var queryFields = [
			['accName','bankCategory','bankName','accountName','account','province','city'],	// 现金银行账户
			['storeroomNum','stockCode','classificationName','stockName',
			 'measurementPlanName','classificationCode','remark',
			 'measurementPlanCode','mnemonic'],													// 货品
			['no','name','tel','businesser','province','area','contactPerson','addr'],			// 客户
			['no','name','tel','contactPerson','addr','province','city'],						// 供应商 
			['number','name','dept','job','email'],												// 员工
			['category','name','subject'],														// 收支原因
			['subjectName','srCode'],															// 出入库类别 
			['storeroomName','provinceName','cityName','adminName','remark','storeroomCode'],	// 仓库
			['measurementCode','measurementName','createPerson']								// 计量方案
		];
		// 
		var baseType = null ;
		var url =  (grid.store.proxy&&grid.store.proxy.url)||(grid.store.onProxy&&grid.store.onProxy.url)||grid.store.url ;
		for( var i =0, len = baseTypes.length ; i< len; i++ ){
			if( url.indexOf(baseTypes[i]) != -1 ){
				baseType = i ;
			}
		}
		// 未找到对应的基础档案，返回
		if( baseType == null ){
			return ;
		}
		// 生成 tipMsg
		var tipMsg ='可以对 ' ;// 要显示的用户提示信息
		var flag = false ;
		var cm = grid.getColumnModel() ;
		var sm = grid.getSelectionModel() ;
		var dataIndexs = queryFields[ baseType ] ;
		for( var i =0, len = dataIndexs.length; i< len ; i++){
			var columnIndex = cm.findColumnIndex(dataIndexs[i]);
			if(columnIndex != -1){
//				if( sm.id =='checker' && columnIndex!=0 ){// 兼容 有checkboxSelectionModel的grid
//					columnIndex = columnIndex ;
//				}
				var header = cm.getColumnHeader(columnIndex);
				if( flag === false ){
					tipMsg += Ext.util.Format.stripTags(header) ;
				}else{
					tipMsg += '、'+Ext.util.Format.stripTags(header) +' ';
				}
				flag = true ;
			}
		}
		tipMsg += ' 进行查询' ;
		
		// 在btn 上加上tip
		btn = btn.query('button');
		if( btn && btn.length>0 ){
			btn[0].setAttribute('ext:qtip',tipMsg);
			btn[0].qwidth = 150
		}
//		btn.dom.setAttribute('title',tipMsg);
}

/**
 * 基础信息被单据使用后，修改基础信息时有一部分字段不能进行修改，
 * 调用disableEditField()使字段变为不可编辑状态
 * 调用enableEditField()使字段恢复为可编辑状态
 * @param {} field
 */
function disableEditField( field,msg ){
	field.disableField();
	var label = field.getLabelText();
	if( label ){
		label = label.replace(/\:$/,"").replace(/\*$/,"");//	去掉末尾的"*:"或者"*"号
		label = '"'+label+'"';
	}else{
		label = '该项信息'
	}
	field.el.dom.setAttribute('ext:qtip',msg || (label+'不允许修改<br/><span>档案已被单据调用</span>'));
}
function enableEditField( field ){
	field.enableField();
	field.el.dom.removeAttribute('ext:qtip');
}
// 档案被使用后进行修改时,将noEditFields中的字段设置为不能进行修改
function markNonEditFields(win,ingnoreNullValue){
	Ext.each(win.noEditFields,function( field ){
		if( ingnoreNullValue === true ){
			disableEditField(field);
		}else if( field.getValue() || field.getGroupValue){
			disableEditField(field);
		}
	});
	win.on('hide',win.fn = function(){
		Ext.each(win.noEditFields,function( field ){
			enableEditField( field );									
		});
		win.un('hide',win.fn);
	});
}
/**
 * 废弃下面的两个方法
 */
function enableCopyText( field1,field2,fnName ){
	return;
	field1.el.innerHTML="[ <a onClick="+fnName+" class='u-btn' href='javascript:void(0)'>复制</a> ]"
	field2.el.innerHTML="[ <a onClick="+fnName+" class='u-btn' href='javascript:void(0)'>复制</a> ]"
}
function disableCopyText( field1,field2 ){
	return;
	field1.el.innerHTML="[ 复制 ]"
	field2.el.innerHTML="[ 复制 ]"
	
}
/*
 * 进度条信息配置
 */
var proMsg = {
	SAVE:  '正在保存数据,请稍候...',//保存
	SEARCH:'正在查找数据,请稍候...',//查找
	UNDO:'正在撤销数据,请稍候...' ,//撤销
	REFRESH:'正在刷新数据,请稍候...',//刷新
	AUDIT:'正在审核数据,请稍候...',//审核
	EXECUTE:'正在执行网银付款,请稍候...',//执行
	CANCELAUDIT:'正在取消审核数据,请稍候...',//取消审核
	DEL:'正在删除数据,请稍候...'//删除
}
function initFocus(name) {
	var f = Ext.getCmp(name);
	if(f){
		f.focus.defer(100, f);
	}
}
// 判断文件类型
function Check_FileType(obj) {
	var str = document.getElementById(obj).value;
	var pos = str.lastIndexOf(".");
	var lastname = str.substring(pos, str.length) // 此处文件后缀名也可用数组方式获得str.split(".")
	if ((lastname.toLowerCase() != ".xls")
			&& (lastname.toLowerCase() != ".csv")) {
		displayMessageBox('提示', '导入文件不是规定的模板形式');
		return false;
	} else {
		return true;
	}
}
 
/**
 * @singleton MoneyUtil toChinese: 将金额转换为汉字大写数字的形式
 */
Ufida.MoneyUtil = function(){
	/** 大写数字 */
  var NUMBERS = [ "零", "壹", "贰", "叁", "肆", "伍", "陆",
      "柒", "捌", "玖" ];
  /** 整数部分的单位 */
  var IUNIT = [ "元", "拾", "佰", "仟", "万", "拾", "佰",
      "仟", "亿", "拾", "佰", "仟", "万", "拾", "佰", "仟" ];
  /** 小数部分的单位 */
  var DUNIT = [ "角", "分", "厘" ];
  /**
	 * 得到大写金额。
	 */
  function toChinese( str) {
    str = str.replace(/[,]/g, "");// 去掉","
    var integerStr;// 整数部分数字
    var decimalStr;// 小数部分数字

    // 初始化：分离整数部分和小数部分
    if (str.indexOf(".") > 0) {
      integerStr = str.substring(0, str.indexOf("."));
      decimalStr = str.substring(str.indexOf(".") + 1);
    } else if (str.indexOf(".") == 0) {
      integerStr = "";
      decimalStr = str.substring(1);
    } else {
      integerStr = str;
      decimalStr = "";
    }
    // integerStr去掉首0，不必去掉decimalStr的尾0(超出部分舍去)
    if (!integerStr == "" ) {
      integerStr = integerStr-0+"";
      if (integerStr == "0" ) {
        integerStr = "";
      }
    }
    // overflow超出处理能力，直接返回
    if (integerStr.length > IUNIT.length) {
      return str;
    }

    var integers = toArray(integerStr);// 整数部分数字
    var isMust5 = isMust50(integerStr);// 设置万单位
    var decimals = toArray(decimalStr);// 小数部分数字
    return getChineseInteger(integers, isMust5) + getChineseDecimal(decimals);
  }

  /**
	 * 整数部分和小数部分转换为数组，从高位至低位
	 */
  function toArray( number ) {
    var array = [];
    for (var i = 0; i < number.length; i++) {
      array.push( number.substring(i, i + 1) - 0);
    }
    return array;
  }

  /**
	 * 得到中文金额的整数部分。
	 */
  function getChineseInteger( integers,  isMust5) {
    var chineseInteger = "";
    var length = integers.length;
    for (var i = 0; i < length; i++) {
      // 0出现在关键位置：1234(万)5678(亿)9012(万)3456(元)
      // 特殊情况：10(拾元、壹拾元、壹拾万元、拾万元)
      var key = "";
      if (integers[i] == 0) {
        if ((length - i) == 13)// 万(亿)(必填)
          key = IUNIT[4];
        else if ((length - i) == 9)// 亿(必填)
          key = IUNIT[8];
        else if ((length - i) == 5 && isMust5)// 万(不必填)
          key = IUNIT[4];
        else if ((length - i) == 1)// 元(必填)
          key = IUNIT[0];
        // 0遇非0时补零，不包含最后一位
        if ((length - i) > 1 && integers[i + 1] != 0)
          key += NUMBERS[0];
      }
      chineseInteger += (integers[i] == 0 ? key
          : (NUMBERS[integers[i]] + IUNIT[length - i - 1]));
    }
    return chineseInteger;
  }

  /**
	 * 得到中文金额的小数部分。
	 */
  function getChineseDecimal(decimals) {
    var chineseDecimal = "";
    for (var i = 0; i < decimals.length; i++) {
      // 舍去3位小数之后的
      if (i == 3)
        break;
      chineseDecimal+=(decimals[i] == 0 ? ""
          : (NUMBERS[decimals[i]] + DUNIT[i]));
    }
    return chineseDecimal;
  }

  /**
	 * 判断第5位数字的单位"万"是否应加。
	 */
  function isMust50(integerStr) {
    var length = integerStr.length;
    if (length > 4) {
      var subInteger = "";
      if (length > 8) {
        // 取得从低位数，第5到第8位的字串
        subInteger = integerStr.substring(length - 8, length - 4);
      } else {
        subInteger = integerStr.substring(0, length - 4);
      }
      return (subInteger)-0 > 0;
    } else {
      return false;
    }
  }
  
  
  return {
  	toChinese	: function(v){
  		return toChinese(v)
  	}
  }
}();

/**
 * HTMLEncoder
 * @autor 	tongl	20090708
 */
var HTMLEncoder = {
	characters	: {
		"&" : "&amp;",
		"'" : "&squot;",
		'"' : "&quote;",
		"<" : "&lt;",
		">" : "&gt;"
     },
	encode	: function(s){
		var orig = s ;
		if( typeof s == 'undefined'){
			s = '';
		}
		if( typeof s != 'string'){
			s = new String(s)
		}
		var cs = this.characters ;
		for( var c in cs){
			var regStr = '/{0}/ig'.format(c)
			s = s.replace( eval(regStr), cs[c])
		}
		return s ;
	},
	decode	: function(s){
		s = s || '';
		if( typeof s != 'string'){
			return ;
		}
		var cs = this.characters ;
		for( var c in cs){
			var regStr = '/{0}/ig'.format(cs[c])
			s = s.replace( eval(regStr), c )
		}
		return s ;
	}
};

Ext.ns('Ufida.util');
Ufida.util=function(){
	var dateNoDashRe = /\d{8}/ ;
	var dateWithDashRe = /\d{4}-\d{2}-\d{2}/ ;
	return {
		/** 日期格式转换: 20090909 转换为 2009-09-09 **/
		formatDateToDash : function(dateStr){
			if( dateNoDashRe.test(dateStr) ){
				return dateStr.replace(/(\d{4})(\d{2})(\d{2})/,"$1-$2-$3") 
			}
			return dateStr ;
		}
	}
}();

/**
 * 给数组加上常用的方法
 */
Array.prototype.contains = function(obj){
	return this.indexOf(obj) !=-1;
};
Array.prototype.each = function(fun){
	for( var i=0,len=this.length;i<len;i++){
		fun(this[i],this,i);
	}
};

/**
 * 录单页面常用快捷键
 */
Ext.ns('AccKey');
AccKey = {
	keyMaps		: {},
	register	: function(key,keyMap){
		if( key ){
			this.keyMaps[key] = keyMap;
		}
	},
	getKeyMap	: function(key){
		return this.keyMaps[key];
	},
	SAVE		: 'Alt+S',			// 保存
	SAVE_NEW	: 'Alt+W'//,		// 保存并新增
//	UNDO		: 'Ctrl+U',			// 撤销
//	EDIT		: 'Ctrl+E',			// 编辑
//	LIST		: 'Ctrl+L',			// 转到单据列表 
//	NEXT_PAGE	: 'Ctrl+PAGEDOWN',	// 下一页
//	LAST_PAGE	: 'Ctrl+PAGEUP',	// 上一页
//	PRINT		: 'Ctrl+P',			// 打印
//	DELETE		: 'Ctrl+X'			// 删除
	
}
